package co.com.bean.planservicio;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.Stateless;

import co.com.smart.maestro.infraestructure.dto.PlanServicioDTO;
import co.com.smart.maestro.infraestructure.dto.ResponseJson;
import co.com.smart.mapper.Mapper;
import co.com.smart.persistence.entity.PlanServicioFacadeLocal;
import co.com.smart.persistence.entity.dto.SmartPlanServicio;
import co.com.smart.session.DelegateContextEJB;
import co.com.smart.utilidades.Constantes;

/**
 * Session Bean implementation class PersonaBean
 */
@Stateless(mappedName = "ejb/PlanServicioBean")
public class PlanServicioBean implements PlanServicioBeanLocal{
	private PlanServicioFacadeLocal facade;

	public PlanServicioBean() {
		facade = DelegateContextEJB.getPlanServicioFacadeLocal();
	}

	@Override
	public ResponseJson insertarPlanServicio(PlanServicioDTO planServicioDTO){

		ResponseJson response = new ResponseJson(); 
		try {
			facade.create(Mapper.mapperDtoToSmartPlanServicio(planServicioDTO));
			response.setCodigo(Constantes.StatusResponse.OK.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "planservicio almacenado.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "planservicio almacenado.");
		} catch (Throwable e) {
			System.err.println("Error insertando el planservicio -> " + e.getMessage());
			response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible almacenar el planservicio.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
		}

		return response ;
	}

	@Override
	public List<PlanServicioDTO> consultarAllPlanServicio(){
		List<PlanServicioDTO> planservicio = new ArrayList<PlanServicioDTO>();
		for (SmartPlanServicio entity : facade.findAll()) {
			if(entity.getSmFhretiro() == null){
				planservicio.add(Mapper.mapperSmartPlanServicioToDto(entity));
			}
		}

		return planservicio;
	}

	@Override
	public PlanServicioDTO consultarPlanServicioId(PlanServicioDTO planServicioDTO) {
		PlanServicioDTO planservicio = new PlanServicioDTO();
		SmartPlanServicio entity  = facade.find(planServicioDTO.getScplanservicio());
		if(entity != null && entity.getSmFhretiro() == null){
			planservicio = Mapper.mapperSmartPlanServicioToDto(entity);
		}
		return planservicio;
	}

	@Override
	public ResponseJson editPlanServicio(PlanServicioDTO planServicioDTO) {
		ResponseJson response = new ResponseJson(); 
		try {
			planServicioDTO.setFhmodificacion(new Date());
			facade.edit(Mapper.mapperDtoToSmartPlanServicio(planServicioDTO));
			response.setCodigo(Constantes.StatusResponse.OK.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "planservicio editado.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "planservicio editado.");
		} catch (Throwable e) {
			System.err.println("Error editando el planservicio -> " + e.getMessage());
			response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible editar el planservicio.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
		}

		return response ;
	}

	@Override
	public ResponseJson removePlanServicio(PlanServicioDTO planServicioDTO,  boolean logic){
		ResponseJson response = new ResponseJson(); 
		if(logic){
			try {
				planServicioDTO.setFhretiro(new Date());
				planServicioDTO.setFhmodificacion(new Date());
				facade.edit(Mapper.mapperDtoToSmartPlanServicio(planServicioDTO));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "planservicio inactivado");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "planservicio inactivado.");
			} catch (Throwable e) {
				System.err.println("Error editando el planservicio -> " + e.getMessage());
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible inactivar el planservicio.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}
		}else{
			try {
				facade.remove(Mapper.mapperDtoToSmartPlanServicio(planServicioDTO));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "planservicio eliminado");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "planservicio eliminado.");
			} catch (Throwable e) {
				System.err.println("Error eliminando el planservicio -> " + e.getMessage());
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible eliminar el planservicio.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}
		}
		return response ;
	}

}
